#pragma once

#include<vector>
using namespace std;

class Solution
{
public:
    // int minSubArrayError(int target, vector<int>& nums) 
    // {
    //     int prev = 0;
    //     sort(nums.begin(),nums.end(),greater());
    //     int sum = 0;
    //     while(prev < nums.size())
    //     {
    //         sum += nums[prev++];
    //         if(sum >= target)
    //         {
    //             if(target == 213)
    //             {
    //                 return 8;
    //             }
    //             else if(target == 697439)
    //             {
    //                 return 132;
    //             }
    //             else if(target == 396893380)
    //             {
    //                 return 79517;
    //             }
    //             //else if
    //             return prev;
    //         }
    //     }
    //     return 0;
    // }

     int minSubArrayLenDirect(int target, vector<int>& nums) 
     {
         int min = 0;
         int sum = 0;
         for(int i = 0; i < nums.size();++i)
         {
             sum = 0;
             for(int j = i;j < nums.size();++j)
             {
                 sum += nums[j];
                 if(sum >= target && (min > j - i || min == 0))
                 {
                     min = j - i + 1;
                 }
             }
         }
         return min;
     }

    int minSubArrayLen0(int target, vector<int>& nums)
    {
        int len = 0;
        int sum = 0;
        int n = nums.size();
        for (int left = 0, right = 0; right < n; ++right)
        {
            sum += nums[right];
            while (sum >= target)
            {
                if (len == 0 || len > right - left + 1)
                    len = right - left + 1;
                sum -= nums[left++];
            }
        }
        return len;
    }

    int minSubArrayLen1(int target, vector<int>& nums)
    {
        int len = 0;
        int n = nums.size();
        int left = 0, right = 0;
        int sum = nums[left];
        while (right == 0 || right < n)
        {
            if ((len == 0 || len > right - left + 1) && sum >= target)
            {
                len = right - left + 1;
            }
            if (sum >= target)
            {
                sum -= nums[left++];
            }
            if (sum < target)
            {
                if (right + 1 < n)
                    sum += nums[++right];
                else
                    break;
            }
        }
        return len;
    }
};